const menu = {
    /***
     * 模块内部的 action、mutation 和 getter 是注册在全局命名空间
     * 通过添加 namespaced: true 的方式使其成为带命名空间的模块
     */
    namespaced: true,
    /** */
    state: {
        menu: JSON.parse(sessionStorage.getItem('menu')) || [],
    },
    /**mutation 必须是同步函数，this.$store.commit('xxx')触发
     * mapMutations 在组件中可使用mapMutations，将 this.xxx() 映射为 this.$store.commit('xxx')
     */
    mutations: {
        set_menu: (state, menu) => {
            state.menu = menu;
            if (menu == []) {
                sessionStorage.removeItem('menu');
            } else {
                sessionStorage.setItem("menu", JSON.stringify(menu));
            }
        },
    },
    /** actions 可异步, this.$store.dispatch('xxx')触发
     * mapActions 在组件中可使用mapActions，将this.xxx() 映射为this.$store.dispatch('xxx') 
     * */
    actions: {
        cache_menu({
            commit
        }, menu) {
            commit('set_menu', menu);
        },
        removeMenu({
            commit
        }) {
            commit('set_menu', []);
        },
        removeAll({
            commit
        }) {
            commit('set_menu', []);
        }
    },
    /**
     * mapGetters 在组件中可使用mapGetters，将this.xxx 映射为 this.$store.getters.xxx
     */
    getters: {
        getmenu: state => {
            return state.menu
        }
    }
}

export default menu